# -*- encoding:utf-8 -*-
"""
@作者：ven
@文件名：execlUtil.py
@时间：2021-10-15  9:17
@文档说明:
"""
import json
import os
from pprint import pprint

import xlrd
from xlutils.copy import copy


from utils.pathUtil import data_path


def get_execl_data(fileDir, sheetName, caseName, *args, caseNum=None):
    '''
    1. 文件路径参数化
    2. 获取列参数化，根据传入的列名称，获取对应的列索引
       (1) 获取标题行 titleList = workSheet.row_values(0)
       (2) 获取具体列对应的所索引  titleList.index(i)
    3. 获取冒烟测试测试用例
       (1)用户输入的可能情况:['all','001','005','002-003']
          1- 如果列表中包含all,则取所有的测试用例，其他忽略
          2- 如果列表中不包含all,包含区间，则取区间段内所有的测试用例
          3- 如果列表中不包含all，包含间隔用例，则取所有的间隔的用例
    4. 将获取到的列对应的内容存放到列表execlData进行返回，其中对于json类型的数据进行转换，转为字典类型
    5. 将调用get_execl_data(os.path.join(data_path, 'irs.xls'), '登录', 'Login', '标题', '请求参数', '响应预期结果',caseNum=['003'])参数化
    '''
    execlData = []
    colIndex = []
    caseRunList = []
    workBook = xlrd.open_workbook(fileDir, formatting_info=True)
    workSheet = workBook.sheet_by_name(sheetName)
    titleList = workSheet.row_values(0)
    for i in args:
        colIndex.append(titleList.index(i))

    #  获取冒烟测试测试用例,默认执行所有的测试用例
    if caseNum is None:
        caseRunList.extend(workSheet.col_values(0, 1))
    else:
        if 'all' in caseNum or caseNum is None:
            caseRunList.extend(workSheet.col_values(0,1))
        else:
            for item in caseNum:
                if '-' in str(item):
                    start,end = item.split('-')
                    for j in range(int(start),int(end)+1):
                        caseRunList.append(f'{caseName}{j:0>3}')
                else:
                    caseRunList.append(f'{caseName}{item:0>3}')


    # 获取对应的请求内容和预期值,i代表行数
    for i in range(1, workSheet.nrows):
        if caseName in workSheet.cell_value(i, 0) and workSheet.cell_value(i, 0) in caseRunList:
            result = []  #存放获取用户输入所有列的数据
            for index in colIndex:
                tmp = workSheet.cell_value(i, index)
                # 将请求参数转换成字典类型
                if titleList[index] == '请求参数':
                    tmp = json.loads(tmp)
                result.append(tmp)
            execlData.append(tuple(result))
    return execlData


def write_execl_data():
    # 不清空写入
    dir = '../data/irs.xls'
    workBook = xlrd.open_workbook(dir, formatting_info=True)
    workBookNew = copy(workBook)
    workSheetNew = workBookNew.get_sheet(0)
    return workBookNew, workSheetNew


if __name__ == '__main__':
    # for item in get_execl_data(os.path.join(data_path, 'irs.xls'), '登录', 'Login', '标题', '请求参数', '响应预期结果',caseNum=['003']):
    #     print(item)

    res = get_execl_data('../data/records.xls', '时长三班倒', 'CASE', '标题', '识别时间', '响应预期结果', caseNum=None)
    for item in res:
        print(item)